package cn.zhfeat.hatch.web.controller.system;


import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import cn.zhfeat.core.base.BaseResultModel;
import cn.zhfeat.hatch.dto.store.BaseStoreToUserDto;
import cn.zhfeat.hatch.dto.sysuser.SysUserDto;
import cn.zhfeat.hatch.entity.sysuser.SysUser;
import cn.zhfeat.hatch.web.service.IAccountService;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

/**
 * @description: 用户信息相关
 * 	原：RequestMapping("/api/account") 变更为：@RequestMapping("/account")
 *
 * @author ZhangHao
 * @version 1.0.0.1
 * @date 2018年5月16日 上午10:00:50
 */
@Controller
@RequestMapping("/account")
public class AccountController {

    // 日志输出
    private Logger logger = Logger.getLogger(AccountController.class);

    @Autowired
    private IAccountService accountService;


    /**
     * @description: 新建名片-弹框列表|分页
     * 			原方法名：getUserAllByNameOrPhone
     *
     * @param dto
     * @author ZhangHao
     * @date 2018年5月16日 上午10:03:55
     * @version 1.0.0.1
     */
    @RequestMapping(value = "/ajaxAccountDialogUserList")
    @ResponseBody
    public Object ajaxAccountDialogUserList(SysUserDto dto) {
        // (String key_word, String startIndex, String page_size, String tenant_id) {
        // return accountService.getUserAllByNameOrPhone(key_word, startIndex, page_size, tenant_id);
        return accountService.ajaxAccountDialogUserList(dto);
    }

    /**
     * @description: 弹框列表|分页,表格形式，上面的方法是选项卡形式
     *
     * @param
     * @author ZhangHao
     * @date 2018/8/2 13:28
     * @version 1.0.0.1
     * @return java.lang.Object
     */
    @RequestMapping(value = "/ajaxAccountTableUserList")
    @ResponseBody
    public Object ajaxAccountTableUserList(@RequestBody String param){
        return accountService.ajaxAccountTableUserList(param);
    }

    /**
     * @description: 根据user id 定位一条记录,测试提交
     *
     * @param dto
     * @author ZhangHao
     * @date 2018年5月17日 下午8:06:51
     * @version 1.0.0.1
     */
    @RequestMapping(value = "/ajaxFindUserInfoById")
    @ResponseBody
    public Object ajaxFindUserInfoById(SysUserDto dto) {
        return accountService.ajaxFindUserInfoById(dto);
    }

    /**
     * @description: 根据门店id获取门店下所有用户的信息
     *				原方法名：getUsersByStoreId
     * @param dto
     * @return
     * @author ZhangHao
     * @date 2018年5月19日 下午4:13:42
     * @version 1.0.0.1
     */
    @RequestMapping(value = "/findUsersByStoreId")
    @ResponseBody
    public BaseResultModel findUsersByStoreId(BaseStoreToUserDto dto){
        return accountService.findUsersByStoreId(dto);
    }

    /**
     * @description: 根据部门id，查询该部门对应的全部用户信息
     * 需要返回的数据有：
     * (用户角色按逗号分隔，用户手机号，用户姓名，用户业务身份按逗号分隔)
     *
     * @return
     * @author ZhangHao
     * @date 2018年5月24日 下午2:21:12
     * @version 1.0.0.1
     */
    @RequestMapping(value = "/ajaxSelectUserByDepartment")
    @ResponseBody
    public Object ajaxSelectUserByDepartment(SysUserDto dto) {
        return accountService.ajaxSelectUserByDepartment(dto);
    }

    /**
     *
     * @Description: 更改用户协议状态
     *
     * @author: ZhangHao
     * @date:   2018年5月24日 下午3:07:58
     * @version 1.0.0.1
     */
    @RequestMapping(value = "/ajaxUpdateAgreement")
    @ResponseBody
    public Object ajaxUpdateAgreement(){
        return accountService.ajaxUpdateAgreement();
    }

    /**
     * @description: 根据用户名和手机号模糊查询全部用户信息，按部门分类
     *
     * @return
     * @author ZhangHao
     * @date 2018年5月25日 下午5:44:48
     * @version 1.0.0.1
     */
    @RequestMapping(value = "/ajaxSelectUserByKeyWord")
    @ResponseBody
    public Object ajaxSelectUserByKeyWord(SysUserDto dto) {
        return accountService.ajaxSelectUserByKeyWord(dto);
    }


    /**
     * @description: 根据状态操作用户 0启用 1停用 2删除
     *
     * @param dto
     * @return
     * @author ZhangHao
     * @date 2018年5月26日 上午11:53:01
     * @version 1.0.0.1
     */
    @RequestMapping(value = "/ajaxOptionUser")
    @ResponseBody
    public Object ajaxOptionUser(SysUserDto dto) {
        return accountService.ajaxOptionUser(dto);
    }


    /**
     * @description: 去数据库为一组用户绑定一组角色
     *
     * @param dto
     * @return
     * @author ZhangHao
     * @date 2018年5月26日 下午5:15:09
     * @version 1.0.0.1
     */
    @RequestMapping(value = "/ajaxCreateUserRolesGroup")
    @ResponseBody
    public Object ajaxCreateUserRolesGroup(SysUserDto dto) {
        return accountService.ajaxCreateUserRolesGroup(dto);
    }


    /**
     * @description: 创建用户及用户绑定的相关信息
     *
     * @return
     * @author ZhangHao
     * @date 2018年5月27日 上午8:10:47
     * @version 1.0.0.1
     */
    @RequestMapping(value = "/ajaxCreateUser")
    @ResponseBody
    public Object ajaxCreateUser(SysUser entity) {
        return accountService.ajaxCreateUser(entity);
    }

    /**
     * @description: 初始化用户数据，用于编辑员工模块回显数据
     *
     * @return
     * @author ZhangHao
     * @date 2018年5月27日 上午11:19:10
     * @version 1.0.0.1
     */
    @RequestMapping(value = "/ajaxSeleUserInfoForUpdate")
    @ResponseBody
    public Object ajaxSeleUserInfoForUpdate(SysUserDto dto) {
        return accountService.ajaxSeleUserInfoForUpdate(dto);
    }

    /**
     * @description: 编辑 用户信息
     *
     * @param entity
     * @return
     * @author ZhangHao
     * @date 2018年5月27日 下午1:39:51
     * @version 1.0.0.1
     */
    @RequestMapping(value = "/ajaxUpdateUser")
    @ResponseBody
    public Object ajaxUpdateUser(SysUser entity) {
        return accountService.ajaxUpdateUser(entity);
    }

    /**
     * @description: 校检用户是否存在，并在cookie设置当前用户信息
     * 忘记密码使用
     *
     * @param dto
     * @return
     * @author ZhangHao
     * @date 2018年5月28日 下午12:01:11
     * @version 1.0.0.1
     */
    @RequestMapping(value = "/ajaxUserInfoByRecoverPwd")
    @ResponseBody
    public Object ajaxUserInfoByRecoverPwd(HttpServletResponse response,SysUserDto dto) {
        return accountService.ajaxUserInfoByRecoverPwd(dto,response);
    }

    /**
     * @description: 找回密码使用
     *
     * @return
     * @author ZhangHao
     * @date 2018年5月28日 下午6:23:08
     * @version 1.0.0.1
     */
    @RequestMapping(value = "/ajaxRetrievePwd")
    @ResponseBody
    public Object ajaxRetrievePwd(HttpServletRequest request,SysUserDto dto) {
        return accountService.ajaxRetrievePwd(dto,request);
    }

    /**
     * @description: 重置密码
     *
     * @param dto
     * @return
     * @author ZhangHao
     * @date 2018年5月29日 下午3:35:53
     * @version 1.0.0.1
     */
    @RequestMapping(value = "/ajaxResetPassword")
    @ResponseBody
    public Object ajaxResetPassword(SysUserDto dto) {
        return accountService.ajaxResetPassword(dto);
    }

    /**
     * @description: 首次登陆展示用户基础信息
     *
     * @return
     * @author ZhangHao
     * @date 2018年5月29日 下午9:46:53
     * @version 1.0.0.1
     */
    @RequestMapping(value = "/ajaxPerInforShow")
    @ResponseBody
    public Object ajaxPerInforShow(SysUserDto dto){
        return accountService.ajaxPerInforShow(dto);
    }

    /**
     * @description: 首次登陆更新用户基础信息
     *
     * @param entity
     * @return
     * @author ZhangHao
     * @date 2018年5月30日 上午9:51:15
     * @version 1.0.0.1
     */
    @RequestMapping(value = "/ajaxPerInforUpdate")
    @ResponseBody
    public Object ajaxPerInforUpdate(SysUser entity) {
        return accountService.ajaxPerInforUpdate(entity);
    }


    /**
     * @description: 初始化企业超级管理员账号
     * 注：
     * 1、企业需要在company_info按顺序手动构建，对应的库由cid进行匹配，如cid = 1 对应 cgroup_00001库
     * 2、初始化客户用户之前要确保对应的客户库已创建，表结构一致，表冗余数据清空
     *
     * 所需参数：
     * cid - 企业id
     * account - 客户手机号
     * name - 客户名称
     *
     * companyName - 公司名称
     * companyAddress - 公司地址
     *
     * 请求示例：/account/initCustomerAccount?cid=4&account=15820300546&name=04库客户&companyName=04库公司&companyAddress=数码庄园
     *
     * @return
     * @author ZhangHao
     * @date 2018年6月2日 上午10:53:21
     * @version 1.0.0.1
     */
    @RequestMapping(value = "/initCustomerAccount")
    @ResponseBody
    public Object initCustomerAccount(SysUserDto dto) {
        return accountService.initCustomerAccount(dto);
    }



    /**
     * @description: 手机页面重置密码
     *
     * @param dto
     * @author ZhangHao
     * @date 2018年6月4日 下午8:06:40
     * @version 1.0.0.1
     */
    @RequestMapping(value = "/ajaxClientResetPassword")
    @ResponseBody
    public BaseResultModel ajaxClientResetPassword(SysUserDto dto) {
        return accountService.ajaxClientResetPassword(dto);
    }


    /**
     * @description: 账号开通服务使用，增加可以选择权限范围，创建企业的功能
     *
     * @param
     * @author ZhangHao
     * @date 2018/10/23 14:36
     * @version 1.0.0.1
     * @return java.lang.Object
     */

    @RequestMapping(value = "/initCustomerAccountService")
    @ResponseBody
    public Object initCustomerAccountService(SysUserDto dto) {
        return accountService.initCustomerAccountService(dto);
    }


    /**
     * @description: 根据手机号展示或隐藏客户CRM权限
     *
     * @param
     * @author ZhangHao
     * @date 2018/10/23 17:25
     * @version 1.0.0.1
     * @return java.lang.Object
     */
    @RequestMapping(value = "/showAndHideCrmMenu")
    @ResponseBody
    public Object showAndHideCrmMenu(SysUserDto dto){
        return accountService.showAndHideCrmMenu(dto);
    }


    /**
     * @description: 查询账号创建手机号是否重复
     *
     * @param
     * @author ZhangHao
     * @date 2018/10/24 14:32
     * @version 1.0.0.1
     * @return java.lang.Object
     */

    @RequestMapping(value = "/getAccountIfRepeat")
    @ResponseBody
    public Object getAccountIfRepeat(SysUserDto dto){
        return accountService.getAccountIfRepeat(dto);
    }

}
